package com.ebottabi; import com.ebottabi.bolt.TwitterFilterBolt; import com.ebottabi.spout.TwitterSpout; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.StormSubmitter; import backtype.storm.topology.TopologyBuilder; import com.ebottabi.bolt.LinkFilterBolt; import com.ebottabi.bolt.RedisGooseExtractor; import com.ebottabi.bolt.RedisLinksPublisherBolt; import com.ebottabi.bolt.RedisMarketBolt; import com.ebottabi.bolt.RedisRetweetBolt; import com.ebottabi.bolt.RedisTagsPublisherBolt; public class Topology { /** * @param args */ public static void main(String[] args) throws Exception { TopologyBuilder builder = new TopologyBuilder(); //Tweets from twitter sport //TODO: setup your twitter credentials TwitterSpout twitterSpout = new TwitterSpout(); builder.setSpout("twitter", twitterSpout); //Initial filter builder.setBolt("filter", new TwitterFilterBolt(), 2).shuffleGrouping("twitter"); //Tags publishing builder.setBolt("tags", new RedisTagsPublisherBolt("tags")).shuffleGrouping("filter"); //Retweets builder.setBolt("retweets", new RedisRetweetBolt(3), 2).shuffleGrouping("filter"); //Links builder.setBolt("linkFilter", new LinkFilterBolt(), 2).shuffleGrouping("filter"); builder.setBolt("links", new RedisLinksPublisherBolt(), 4).shuffleGrouping("linkFilter"); builder.setBolt("market", new RedisMarketBolt(), 1).shuffleGrouping("links"); builder.setBolt("articles", new RedisGooseExtractor(), 5).shuffleGrouping("retweets"); Config conf = new Config(); conf.setDebug(false); if (args != null && args.length > 0) { conf.setNumWorkers(3); StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); } else { LocalCluster cluster = new LocalCluster(); cluster.submitTopology("twitter", conf, builder.createTopology()); } } }